import dotenv from "dotenv";
import { MongoClient } from "mongodb";
import { fileURLToPath } from "url";
import path from "path";

// 获取当前文件路径
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

// 加载环境变量
dotenv.config({ path: path.join(__dirname, "../.env") });

const MONGODB_URI = process.env.MONGODB_URI;
const DB_NAME = process.env.DB_NAME || "login-system";
const COLLECTION = "customers";

// 数据库迁移脚本：为现有客户添加别名字段
async function addAliasField() {
  let client;

  try {
    // 连接数据库
    client = new MongoClient(MONGODB_URI);
    await client.connect();
    console.log("数据库连接成功");

    const db = client.db(DB_NAME);
    const collection = db.collection(COLLECTION);

    // 为所有现有客户添加空的别名字段
    const result = await collection.updateMany(
      { alias: { $exists: false } }, // 查找没有alias字段的文档
      { $set: { alias: "" } } // 设置alias为空字符串
    );

    console.log(`成功更新 ${result.modifiedCount} 个客户记录`);

    // 检查是否存在唯一索引
    const indexes = await collection.indexes();
    const hasUniqueIndex = indexes.some(
      (index) =>
        index.key &&
        index.key.name === 1 &&
        index.key.phone === 1 &&
        index.unique === true
    );

    // 如果不存在唯一索引，创建它
    if (!hasUniqueIndex) {
      await collection.createIndex({ name: 1, phone: 1 }, { unique: true });
      console.log("创建姓名+手机号唯一索引成功");
    } else {
      console.log("姓名+手机号唯一索引已存在");
    }

    // 检查是否存在文本索引
    const hasTextIndex = indexes.some((index) => index.textIndexVersion);

    // 如果不存在文本索引，创建它
    if (!hasTextIndex) {
      await collection.createIndex({
        name: "text",
        alias: "text",
        phone: "text",
        wechat: "text",
      });
      console.log("创建文本搜索索引成功");
    } else {
      console.log("文本搜索索引已存在");
    }

    console.log("迁移完成");
  } catch (error) {
    console.error("迁移失败:", error);
  } finally {
    if (client) {
      await client.close();
      console.log("数据库连接已关闭");
    }
    process.exit(0);
  }
}

// 运行迁移
addAliasField();
